package org.upo.eps.it.phama.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Entity
@Table(name="far_empleado", catalog="phama")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Empleado  implements Serializable {

     @Id 
     @GeneratedValue(strategy=IDENTITY)
     @Column(name="ID_EMPLEADO", unique=true, nullable=false)
     private Integer idEmpleado;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="ID_DIRECCION")
     private Direccion direccion;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="JEFE")
     @XmlTransient
     private Empleado jefe;
     
     @Column(name="NOMBRE")
     private String nombre;
     
     @Column(name="APELLIDO1")
     private String apellido1;
     
     @Column(name="APELLIDO2")
     private String apellido2;
     
     @Column(name="TELEFONO", length=9)     
     private String telefono;
     
     @Column(name="EMAIL")
     private String email;
     
     @Column(name="USUARIO")
     private String usuario;
     
     @Column(name="CONTRASENA")
     private String contrasena;
     
     @Column(name="CATEGORIA")
     private String categoria;
     
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="jefe")
     @XmlTransient
     private Set<Empleado> misEmpleados = new HashSet<>(0);

     //<editor-fold defaultstate="collapsed" desc="constructors">
     public Empleado() {
     }
     
     public Empleado(String usuario){
         this.usuario = usuario;
     }
     
     public Empleado(Direccion direccion, String nombre, String apellido1, String apellido2, String telefono, String email, String usuario, String contrasena, String categoria) {
         this.direccion = direccion;
         this.nombre = nombre;
         this.apellido1 = apellido1;
         this.apellido2 = apellido2;
         this.telefono = telefono;
         this.email = email;
         this.usuario = usuario;
         this.contrasena = contrasena;
         this.categoria = categoria;
     }
     
     public Empleado(Direccion direccion, Empleado jefe, String nombre, String apellido1, String apellido2, String telefono, String email, String usuario, String contrasena, String categoria, Set<Empleado> misEmpleados) {
         this.direccion = direccion;
         this.jefe = jefe;
         this.nombre = nombre;
         this.apellido1 = apellido1;
         this.apellido2 = apellido2;
         this.telefono = telefono;
         this.email = email;
         this.usuario = usuario;
         this.contrasena = contrasena;
         this.categoria = categoria;
         this.misEmpleados = misEmpleados;
     }
     //</editor-fold>
        
     //<editor-fold defaultstate="collapsed" desc="getters & setters">
     public Integer getIdEmpleado() {
         return this.idEmpleado;
     }
     
     public void setIdEmpleado(Integer idEmpleado) {
         this.idEmpleado = idEmpleado;
     }
     
     public Direccion getDireccion() {
         return this.direccion;
     }
     
     public void setDireccion(Direccion direccion) {
         this.direccion = direccion;
     }
     
     public Empleado getJefe() {
         return this.jefe;
     }
     
     public void setJefe(Empleado jefe) {
         this.jefe = jefe;
     }
     
     public String getNombre() {
         return this.nombre;
     }
     
     public void setNombre(String nombre) {
         this.nombre = nombre;
     }
     
     public String getApellido1() {
         return this.apellido1;
     }
     
     public void setApellido1(String apellido1) {
         this.apellido1 = apellido1;
     }
     
     public String getApellido2() {
         return this.apellido2;
     }
     
     public void setApellido2(String apellido2) {
         this.apellido2 = apellido2;
     }
     
     public String getTelefono() {
         return this.telefono;
     }
     
     public void setTelefono(String telefono) {
         this.telefono = telefono;
     }
     
     public String getEmail() {
         return this.email;
     }
     
     public void setEmail(String email) {
         this.email = email;
     }
     
     public String getUsuario() {
         return this.usuario;
     }
     
     public void setUsuario(String usuario) {
         this.usuario = usuario;
     }
     
     public String getContrasena() {
         return this.contrasena;
     }
     
     public void setContrasena(String contrasena) {
         this.contrasena = contrasena;
     }
     
     public String getCategoria() {
         return this.categoria;
     }
     
     public void setCategoria(String categoria) {
         this.categoria = categoria;
     }
     
     public Set<Empleado> getMisEmpleados() {
         return this.misEmpleados;
     }
     
     public void setMisEmpleados(Set<Empleado> misEmpleados) {
         this.misEmpleados = misEmpleados;
     }
     //</editor-fold>

     @Override
     public String toString() {
         return String.format("%s %s %s",nombre,apellido1,apellido2);
     }
     
     public String getFullname() {
         return String.format("%s %s %s",nombre,apellido1,apellido2);
     }
}


